// 此文件由 SquareLine Studio 生成
// SquareLine Studio 版本: SquareLine Studio 1.5.4
// LVGL 版本: 8.3.11
// 项目名称: First

#include "../ui.h"
#include <stdio.h>
#include <stdlib.h>
#include "../../lvgl/src/misc/lv_color.h"
#include "../../lvgl/lvgl.h"

// ============= 全局UI对象变量声明 =============
// 登录表单主屏幕对象
lv_obj_t * ui_LoginForm               = NULL;
// 主面板对象（包含背景等）
lv_obj_t * ui_Panel5                  = NULL;
// 背景图片对象
lv_obj_t * ui_Image14                 = NULL;
// 登录容器对象（包含登录输入框和按钮）
lv_obj_t * ui_ContainerLogin          = NULL;
// 用户名输入框对象（登录界面）
lv_obj_t * ui_UserText1               = NULL;
// 密码输入框对象（登录界面）
lv_obj_t * ui_PasswordText1           = NULL;
// 登录按钮对象
lv_obj_t * ui_ButtonLogin             = NULL;
// 登录按钮标签对象
lv_obj_t * ui_LabelLogin              = NULL;
// 注册按钮对象（登录界面的注册按钮，用于跳转到注册界面）
lv_obj_t * ui_ButtonRegister          = NULL;
// 注册按钮标签对象
lv_obj_t * ui_LabelRegister           = NULL;
// 退出按钮对象（图片按钮）
lv_obj_t * ui_ImgButtonExit1          = NULL;
// 标题面板对象
lv_obj_t * ui_Panel6                  = NULL;
// 登录标题图片对象
lv_obj_t * ui_ImageTextLogin          = NULL;
// 用户名输入键盘对象（登录界面）
lv_obj_t * ui_KeyboardUser1           = NULL;
// 密码输入键盘对象（登录界面）
lv_obj_t * ui_KeyboardPassword1       = NULL;
// 注册面板对象
lv_obj_t * ui_PanelRegister           = NULL;
// 返回按钮对象（注册界面）
lv_obj_t * ui_imgButtonBack           = NULL;
// 注册界面背景图片对象（已隐藏）
lv_obj_t * ui_ImageRegisterBackground = NULL;
// 用户名输入框对象（注册界面）
lv_obj_t * ui_UserText2               = NULL;
// 密码输入框对象（注册界面）
lv_obj_t * ui_PasswordText2           = NULL;
// 确认密码输入框对象（注册界面）
lv_obj_t * ui_ConfirmPasswordText2    = NULL;
// 注册按钮对象（注册界面的注册按钮）
lv_obj_t * ui_ButtonRegister2         = NULL;
// 注册按钮标签对象（注册界面）
lv_obj_t * ui_LabelRegister2          = NULL;
// 密码输入键盘对象（注册界面）
lv_obj_t * ui_Keyboardpassword2       = NULL;
// 用户名输入键盘对象（注册界面）
lv_obj_t * ui_KeyboardUser2           = NULL;
// 确认密码输入键盘对象（注册界面）
lv_obj_t * ui_KeyboardConfirmPassword2 = NULL;

/*============= 中文字体样式初始化函数 ============*/
/**
 * @brief 初始化中文字体样式（常规大小）
 * @return 返回指向字体样式的指针
 * @note 使用楷体字体，大小为22，粗体样式
 */
static lv_style_t * FontStyleInit(void)
{
    // 创建字体信息结构体
    static lv_ft_info_t info;
    // FreeType使用C标准文件系统，不需要驱动器盘符
    info.name   = "/usr/share/fonts/simkai.ttf";  // 楷体字体路径
    info.weight = 22;   // 字体大小
    info.style  = FT_FONT_STYLE_BOLD;  // 粗体样式
    info.mem    = NULL;  // 内存指针（NULL表示从文件系统加载）
    // 初始化字体，如果失败则记录错误
    if(!lv_ft_font_init(&info)) {
        LV_LOG_ERROR("create failed.");
    }

    // 使用新字体创建样式
    static lv_style_t style;
    lv_style_init(&style);  // 初始化样式
    lv_style_set_text_font(&style, info.font);  // 设置字体
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);  // 设置文本居中对齐

    return &style;
}

/**
 * @brief 使用 LVGL 内置字体创建样式
 * @param font 指向LVGL内置字体的指针
 * @return 返回指向字体样式的指针
 * @note 封装函数，用于创建使用内置字体的样式
 */
static lv_style_t * create_builtin_font_style(const lv_font_t * font)
{
    static lv_style_t style;
    lv_style_init(&style);  // 初始化样式
    lv_style_set_text_font(&style, font);  // 设置内置字体
    return &style;
}

/**
 * @brief 创建大号字体样式用于标题
 * @return 返回指向字体样式的指针
 * @note 使用楷体字体，大小为32，粗体样式，用于显示大标题
 */
static lv_style_t * FontStyleInitLarge(void)
{
    // 创建字体信息结构体
    static lv_ft_info_t info;
    // FreeType使用C标准文件系统，不需要驱动器盘符
    info.name   = "/usr/share/fonts/simkai.ttf";  // 楷体字体路径
    info.weight = 32;  // 更大的字体大小（用于标题）
    info.style  = FT_FONT_STYLE_BOLD;  // 粗体样式
    info.mem    = NULL;  // 内存指针（NULL表示从文件系统加载）
    // 初始化字体，如果失败则记录错误
    if(!lv_ft_font_init(&info)) {
        LV_LOG_ERROR("create failed.");
    }

    // 使用新字体创建样式
    static lv_style_t style;
    lv_style_init(&style);  // 初始化样式
    lv_style_set_text_font(&style, info.font);  // 设置字体
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);  // 设置文本居中对齐

    return &style;
}

// ============= 事件处理函数 =============

/**
 * @brief 用户名输入框事件处理函数（登录界面）
 * @param e 事件对象指针
 * @note 当输入框失去焦点时隐藏键盘，点击时显示键盘
 */
void ui_event_UserText1(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 当输入框失去焦点时，隐藏用户名输入键盘
    if(event_code == LV_EVENT_DEFOCUSED) {
        _ui_flag_modify(ui_KeyboardUser1, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
    // 当点击输入框时，显示用户名输入键盘
    if(event_code == LV_EVENT_CLICKED) {
        _ui_flag_modify(ui_KeyboardUser1, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
    }
}

/**
 * @brief 密码输入框事件处理函数（登录界面）
 * @param e 事件对象指针
 * @note 当输入框失去焦点时隐藏键盘，点击时显示键盘
 */
void ui_event_PasswordText1(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 当输入框失去焦点时，隐藏密码输入键盘
    if(event_code == LV_EVENT_DEFOCUSED) {
        _ui_flag_modify(ui_KeyboardPassword1, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
    // 当点击输入框时，显示密码输入键盘
    if(event_code == LV_EVENT_CLICKED) {
        _ui_flag_modify(ui_KeyboardPassword1, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
    }
}

/**
 * @brief 登录按钮事件处理函数
 * @param e 事件对象指针
 * @note 处理用户登录逻辑：
 *       1. 验证用户名和密码是否为空
 *       2. 从文件中读取用户数据并验证
 *       3. 根据用户类型跳转到相应界面（管理员或普通用户）
 */
void ui_event_ButtonLogin(lv_event_t * e)
{
    // 初始化中文字体格式
    lv_style_t * fontStyle = FontStyleInit();

    // 1. 获取用户在文本框中输入的内容
    const char * input_username = lv_textarea_get_text(ui_UserText1);  // 获取用户名
    const char * input_password = lv_textarea_get_text(ui_PasswordText1);  // 获取密码
    lv_obj_t * tip;  // 消息框对象指针
    // 为弹窗文本应用中文字体样式

    // 检查用户名是否为空
    if(input_username == NULL || input_username[0] == '\0') {
        // 创建提示弹窗
        tip = lv_msgbox_create(NULL, "提示", "请输入用户名！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式

        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);

        printf("用户名为空\n");
    } 
    // 检查密码是否为空
    else if(input_password == NULL || input_password[0] == '\0') {
        // 创建提示弹窗
        tip = lv_msgbox_create(NULL, "提示", "请输入密码！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式

        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        printf("密码为空\n");
    } 
    // 用户名和密码都不为空，进行验证
    else {
        // 打开用户数据文件，开始对比数据
        FILE * file;
        char username[50];    // 存储从文件读取的用户名
        char password[50];    // 存储从文件读取的密码
        int quota;            // 存储用户余额

        // 以只读模式打开用户数据文件
        file = fopen("/jakl/img/UserData.txt", "r");
        if(file == NULL) {
            printf("无法打开文件\n");
            return;
        }

        // 跳过第一行（标题行）
        char buffer[256];
        if(fgets(buffer, sizeof(buffer), file) == NULL) {
            printf("文件为空或读取失败\n");
            fclose(file);
            return;
        }

        // 逐行读取文件内容，查找匹配的用户
        while(fgets(buffer, sizeof(buffer), file)) {
            // 跳过空行和注释行（以#开头的行）
            if(buffer[0] == '\n' || buffer[0] == '#') {
                continue;
            }

            // 解析每行数据：用户名 密码 余额
            if(sscanf(buffer, "%s %s %d", username, password, &quota) == 3) {
                // 比较输入的用户名和密码是否与文件中的匹配
                if(strcmp(input_username, username) == 0 && strcmp(input_password, password) == 0) {
                    // 保存用户信息到全局变量
                    strcpy(current_username, username);  // 保存用户名
                    current_user_balance = quota;        // 保存用户余额

                    // 重置系统界面的购物状态
                    reset_system_state();
                    
                    // 创建一个缓冲区来存储格式化的字符串
                    char msg[256];

                    // 格式化登录成功消息
                    snprintf(msg, sizeof(msg), "用户名: %s\n余额: %d", username, quota);

                    lv_event_code_t event_code = lv_event_get_code(e);
                    if(event_code == LV_EVENT_CLICKED) {
                        // 检查是否是 admin 管理员账户
                        if(strcmp(input_username, "admin") == 0) {
                            // 跳转到管理员界面
                            _ui_screen_change(&ui_AdminPanel, LV_SCR_LOAD_ANIM_FADE_OUT, 10, 0,
                                              &ui_AdminPanel_screen_init);
                        } 
                        // 普通用户登录
                        else {
                            // 显示登录成功消息框
                            tip = lv_msgbox_create(NULL, "登录成功!", msg, NULL, true);
                            lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
                            lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
                            
                            // 设置关闭按钮的字体样式
                            lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
                            lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
                            lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
                            
                            // 普通用户跳转到系统界面
                            _ui_screen_change(&ui_SystemForm, LV_SCR_LOAD_ANIM_FADE_OUT, 10, 0,
                                              &ui_SystemForm_screen_init);
                        }
                    }
                    printf("登录成功！用户名: %s, 余额: %d\n", username, quota);
                    fclose(file);  // 关闭文件
                    return;  // 登录成功，退出函数
                }
            }
        }
        
        // 如果没有找到匹配的用户，登录失败
        tip = lv_msgbox_create(NULL, "登录失败！", "用户名或密码错误。", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        printf("登录失败！用户名或密码错误。\n");
        
        // 清空输入框，让用户重新输入
        lv_textarea_set_text(ui_UserText1, "");
        lv_textarea_set_text(ui_PasswordText1, "");
        fclose(file);  // 关闭文件
    }
}

/**
 * @brief 注册按钮事件处理函数（登录界面的注册按钮）
 * @param e 事件对象指针
 * @note 点击后显示注册面板，隐藏登录容器
 */
void ui_event_ButtonRegister(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    if(event_code == LV_EVENT_CLICKED) {
        // 显示注册面板
        _ui_flag_modify(ui_PanelRegister, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
        // 隐藏登录容器
        _ui_flag_modify(ui_ContainerLogin, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
}

/**
 * @brief 返回按钮事件处理函数（注册界面的返回按钮）
 * @param e 事件对象指针
 * @note 点击后隐藏注册面板，显示登录容器（返回登录界面）
 */
void ui_event_imgButtonBack(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    if(event_code == LV_EVENT_CLICKED) {
        // 显示登录容器
        _ui_flag_modify(ui_ContainerLogin, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
        // 隐藏注册面板
        _ui_flag_modify(ui_PanelRegister, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
}

/**
 * @brief 用户名输入框事件处理函数（注册界面）
 * @param e 事件对象指针
 * @note 当输入框失去焦点时隐藏键盘，获得焦点时显示键盘
 */
void ui_event_UserText2(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 当输入框失去焦点时，隐藏用户名输入键盘
    if(event_code == LV_EVENT_DEFOCUSED) {
        _ui_flag_modify(ui_KeyboardUser2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
    // 当输入框获得焦点时，显示用户名输入键盘
    if(event_code == LV_EVENT_FOCUSED) {
        _ui_flag_modify(ui_KeyboardUser2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
    }
}

/**
 * @brief 密码输入框事件处理函数（注册界面）
 * @param e 事件对象指针
 * @note 当输入框失去焦点时隐藏键盘，获得焦点时显示键盘
 */
void ui_event_PasswordText2(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 当输入框失去焦点时，隐藏密码输入键盘
    if(event_code == LV_EVENT_DEFOCUSED) {
        _ui_flag_modify(ui_Keyboardpassword2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
    // 当输入框获得焦点时，显示密码输入键盘
    if(event_code == LV_EVENT_FOCUSED) {
        _ui_flag_modify(ui_Keyboardpassword2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
    }
}

/**
 * @brief 确认密码输入框事件处理函数（注册界面）
 * @param e 事件对象指针
 * @note 当输入框失去焦点时隐藏键盘，获得焦点时显示键盘
 */
void ui_event_ConfirmPasswordText2(lv_event_t * e)
{
    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 当输入框失去焦点时，隐藏确认密码输入键盘
    if(event_code == LV_EVENT_DEFOCUSED) {
        _ui_flag_modify(ui_KeyboardConfirmPassword2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
    // 当输入框获得焦点时，显示确认密码输入键盘
    if(event_code == LV_EVENT_FOCUSED) {
        _ui_flag_modify(ui_KeyboardConfirmPassword2, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
    }
}

/**
 * @brief 检查用户名是否已存在
 * @param username 要检查的用户名
 * @param filename 用户数据文件路径（未使用，直接使用硬编码路径）
 * @return 如果用户名存在返回true，否则返回false
 * @note 遍历用户数据文件，检查是否有相同的用户名
 */
static bool is_username_exists(const char * username, const char * filename)
{
    // 以只读模式打开用户数据文件
    FILE * file = fopen("/jakl/img/UserData.txt", "r");
    if(file == NULL) {
        // 文件不存在，返回 false
        return false;
    }

    char line[256];           // 存储文件中的一行数据
    char file_username[50];   // 存储从文件读取的用户名
    char file_password[50];   // 存储从文件读取的密码
    int quota;                // 存储用户余额

    // 逐行读取文件内容
    while(fgets(line, sizeof(line), file)) {
        // 解析每行数据：用户名 密码 余额
        if(sscanf(line, "%s %s %d", file_username, file_password, &quota) == 3) {
            // 比较用户名是否相同
            if(strcmp(username, file_username) == 0) {
                fclose(file);  // 关闭文件
                return true;   // 找到相同的用户名，返回true
            }
        }
    }

    fclose(file);   // 关闭文件
    return false;   // 没有找到相同的用户名，返回false
}

/**
 * @brief 注册按钮事件处理函数（注册界面的注册按钮）
 * @param e 事件对象指针
 * @note 处理用户注册逻辑：
 *       1. 验证输入是否为空
 *       2. 验证密码和确认密码是否一致
 *       3. 检查用户名是否已存在
 *       4. 将用户信息写入文件
 *       5. 注册成功后自动填充登录界面并返回
 */
void ui_event_ButtonRegister2(lv_event_t * e)
{
    // 初始化中文字体格式
    lv_style_t * fontStyle = FontStyleInit();
    
    // 获取用户输入的用户名、密码和确认密码
    const char * input_username = lv_textarea_get_text(ui_UserText2);           // 获取用户名
    const char * input_password = lv_textarea_get_text(ui_PasswordText2);       // 获取密码
    const char * input_confirm_password = lv_textarea_get_text(ui_ConfirmPasswordText2);  // 获取确认密码
    lv_obj_t * tip;  // 消息框对象指针

    // 检查用户名、密码和确认密码是否为空
    if(input_username == NULL || input_username[0] == '\0' || 
       input_password == NULL || input_password[0] == '\0' ||
       input_confirm_password == NULL || input_confirm_password[0] == '\0') {
        // 创建提示弹窗
        tip = lv_msgbox_create(NULL, "注册失败", "用户名、密码和确认密码不能为空！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);

        printf("注册失败 ,用户名、密码和确认密码不能为空！");
        return;  // 输入为空，退出函数
    }

    // 检查密码和确认密码是否一致
    if(strcmp(input_password, input_confirm_password) != 0) {
        // 创建提示弹窗
        tip = lv_msgbox_create(NULL, "注册失败", "密码和确认密码不一致！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        printf("注册失败,密码和确认密码不一致！");
        return;  // 密码不一致，退出函数
    }

    // 检查用户名是否已存在
    if(is_username_exists(input_username, "/jakl/img/UserData.txt")) {
        // 创建提示弹窗
        tip = lv_msgbox_create(NULL, "注册失败", "用户名已存在！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        printf("注册失败,用户名已存在！");
        return;  // 用户名已存在，退出函数
    }

    // 打开文件以追加模式（在文件末尾添加新数据）
    FILE * file = fopen("/jakl/img/UserData.txt", "a");
    if(file == NULL) {
        // 创建错误提示弹窗
        tip = lv_msgbox_create(NULL, "注册失败", "无法打开文件！", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        return;  // 文件打开失败，退出函数
    }

    // 将用户名和密码写入文件（新用户余额默认为0）
    fprintf(file, "%s %s 0\n", input_username, input_password);

    // 关闭文件
    fclose(file);

    // 显示注册成功的消息框
    // 创建一个缓冲区来存储格式化的字符串
    char msg[256];

    // 格式化注册成功消息
    snprintf(msg, sizeof(msg), "\n用户名: %s\n密码: %s", input_username, input_password);
    tip = lv_msgbox_create(NULL, "注册成功!", msg, NULL, true);
    lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
    lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
    
    // 设置关闭按钮的字体样式
    lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
    lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
    lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);

    // 自动填充登录界面的用户名和密码（方便用户直接登录）
    lv_textarea_set_text(ui_UserText1, input_username);
    lv_textarea_set_text(ui_PasswordText1, input_password);

    // 清空注册界面的输入框
    lv_textarea_set_text(ui_UserText2, "");
    lv_textarea_set_text(ui_PasswordText2, "");
    lv_textarea_set_text(ui_ConfirmPasswordText2, "");

    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    // 如果事件是点击事件，返回登录界面
    if(event_code == LV_EVENT_CLICKED) {
        // 显示登录容器
        _ui_flag_modify(ui_ContainerLogin, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
        // 隐藏注册面板
        _ui_flag_modify(ui_PanelRegister, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
    }
}

/**
 * @brief 退出按钮事件处理函数
 * @param e 事件对象指针
 * @note 点击退出按钮时显示退出提示消息框（实际退出功能已注释）
 */
void ui_event_ImgButtonExit1(lv_event_t * e)
{
    // 初始化中文字体格式
    lv_style_t * fontStyle = FontStyleInit();

    lv_event_code_t event_code = lv_event_get_code(e);  // 获取事件类型

    if(event_code == LV_EVENT_CLICKED) {
        // 创建退出提示消息框
        lv_obj_t * tip = lv_msgbox_create(NULL, "退出成功!", "正在退出中...", NULL, true);
        lv_obj_align(tip, LV_ALIGN_CENTER, 0, 0);  // 居中显示
        lv_obj_add_style(tip, fontStyle, LV_PART_MAIN);  // 应用中文字体样式
        
        // 设置关闭按钮的字体样式
        lv_obj_t * btn_close         = lv_msgbox_get_close_btn(tip);
        lv_style_t * close_btn_style = create_builtin_font_style(&lv_font_montserrat_22);
        lv_obj_add_style(btn_close, close_btn_style, LV_PART_MAIN);
        // exit(0);  // 实际退出功能已注释
    }
}

// ============= UI构建函数 =============

/**
 * @brief 登录表单屏幕初始化函数
 * @note 创建并初始化登录界面的所有UI组件，包括：
 *       - 登录界面：用户名输入框、密码输入框、登录按钮、注册按钮
 *       - 注册界面：用户名输入框、密码输入框、确认密码输入框、注册按钮
 *       - 键盘：用户名键盘、密码键盘、确认密码键盘
 */
void ui_LoginForm_screen_init(void)
{
    // 初始化中文字体格式
    lv_style_t * fontStyle = FontStyleInit();

    // ============= 创建登录表单主屏幕对象 =============
    ui_LoginForm = lv_obj_create(NULL);  // 创建登录表单主屏幕对象
    lv_obj_clear_flag(ui_LoginForm, LV_OBJ_FLAG_SCROLLABLE);  // 禁用滚动

    // ============= 创建主面板（包含背景等） =============
    ui_Panel5 = lv_obj_create(ui_LoginForm);  // 创建主面板
    lv_obj_set_width(ui_Panel5, 800);          // 设置宽度为800像素
    lv_obj_set_height(ui_Panel5, 480);         // 设置高度为480像素
    lv_obj_set_x(ui_Panel5, 2);                // 设置X坐标偏移
    lv_obj_set_y(ui_Panel5, 0);                // 设置Y坐标偏移
    lv_obj_set_align(ui_Panel5, LV_ALIGN_CENTER);  // 居中对齐
    lv_obj_clear_flag(ui_Panel5, LV_OBJ_FLAG_SCROLLABLE);  // 禁用滚动

    // ============= 创建背景图片 =============
    ui_Image14 = lv_img_create(ui_Panel5);  // 创建背景图片对象
    lv_img_set_src(ui_Image14, &ui_img_fbegduki5_png);  // 设置图片源
    lv_obj_set_width(ui_Image14, LV_SIZE_CONTENT);   // 宽度自适应内容
    lv_obj_set_height(ui_Image14, LV_SIZE_CONTENT);  // 高度自适应内容
    lv_obj_set_x(ui_Image14, 1);                     // 设置X坐标偏移
    lv_obj_set_y(ui_Image14, 1);                     // 设置Y坐标偏移
    lv_obj_set_align(ui_Image14, LV_ALIGN_CENTER);   // 居中对齐
    lv_obj_add_flag(ui_Image14, LV_OBJ_FLAG_ADV_HITTEST);   // 启用高级点击测试
    lv_obj_clear_flag(ui_Image14, LV_OBJ_FLAG_SCROLLABLE);  // 禁用滚动

    // ============= 创建登录容器（包含输入框和按钮） =============
    ui_ContainerLogin = lv_obj_create(ui_Panel5);  // 创建登录容器对象
    lv_obj_remove_style_all(ui_ContainerLogin);    // 移除所有默认样式
    lv_obj_set_width(ui_ContainerLogin, 326);      // 设置宽度
    lv_obj_set_height(ui_ContainerLogin, 222);     // 设置高度
    lv_obj_set_x(ui_ContainerLogin, 1);            // 设置X坐标偏移
    lv_obj_set_y(ui_ContainerLogin, 48);           // 设置Y坐标偏移
    lv_obj_set_align(ui_ContainerLogin, LV_ALIGN_CENTER);  // 居中对齐
    lv_obj_clear_flag(ui_ContainerLogin, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE);  // 禁用点击和滚动

    // ============= 创建用户名输入框（登录界面） =============
    ui_UserText1 = lv_textarea_create(ui_ContainerLogin);  // 创建用户名输入框
    lv_obj_set_width(ui_UserText1, 214);                    // 设置宽度
    lv_obj_set_height(ui_UserText1, LV_SIZE_CONTENT);       // 高度自适应内容
    lv_obj_set_x(ui_UserText1, 44);                         // 设置X坐标偏移
    lv_obj_set_y(ui_UserText1, -84);                        // 设置Y坐标偏移
    lv_obj_set_align(ui_UserText1, LV_ALIGN_CENTER);        // 居中对齐
    lv_textarea_set_placeholder_text(ui_UserText1, "请输入用户名...");  // 设置占位符文本
    lv_obj_add_style(ui_UserText1, fontStyle, 0);           // 应用中文字体样式
    lv_textarea_set_one_line(ui_UserText1, true);           // 设置为单行输入

    // ============= 创建密码输入框（登录界面） =============
    ui_PasswordText1 = lv_textarea_create(ui_ContainerLogin);  // 创建密码输入框
    lv_obj_set_width(ui_PasswordText1, 214);                   // 设置宽度
    lv_obj_set_height(ui_PasswordText1, LV_SIZE_CONTENT);      // 高度自适应内容
    lv_obj_set_x(ui_PasswordText1, 44);                        // 设置X坐标偏移
    lv_obj_set_y(ui_PasswordText1, -10);                       // 设置Y坐标偏移
    lv_obj_set_align(ui_PasswordText1, LV_ALIGN_CENTER);       // 居中对齐
    lv_textarea_set_placeholder_text(ui_PasswordText1, "请输入密码...");  // 设置占位符文本
    lv_obj_add_style(ui_PasswordText1, fontStyle, 0);          // 应用中文字体样式
    lv_textarea_set_one_line(ui_PasswordText1, true);          // 设置为单行输入
    lv_textarea_set_password_mode(ui_PasswordText1, true);     // 启用密码模式（隐藏输入内容）
    lv_textarea_set_password_bullet(ui_PasswordText1, "*");    // 设置密码显示字符为星号（使用ASCII星号，避免字体缺字显示方框）

    ui_ButtonLogin = lv_btn_create(ui_ContainerLogin);
    lv_obj_set_width(ui_ButtonLogin, 100);
    lv_obj_set_height(ui_ButtonLogin, 50);
    lv_obj_set_x(ui_ButtonLogin, -77);
    lv_obj_set_y(ui_ButtonLogin, 80);
    lv_obj_set_align(ui_ButtonLogin, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_ButtonLogin, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
    lv_obj_clear_flag(ui_ButtonLogin, LV_OBJ_FLAG_SCROLLABLE);    /// Flags
    // 现代化按钮样式
    lv_obj_set_style_bg_color(ui_ButtonLogin, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_ButtonLogin, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_ButtonLogin, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 添加按钮阴影效果
    lv_obj_set_style_shadow_width(ui_ButtonLogin, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_color(ui_ButtonLogin, lv_color_hex(0x6C757D), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_opa(ui_ButtonLogin, 100, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_spread(ui_ButtonLogin, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 按下时的效果
    lv_obj_set_style_shadow_width(ui_ButtonLogin, 5, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_shadow_opa(ui_ButtonLogin, 60, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(ui_ButtonLogin, lv_color_hex(0x6B7FD8), LV_PART_MAIN | LV_STATE_PRESSED);

    ui_LabelLogin = lv_label_create(ui_ButtonLogin);
    lv_obj_set_width(ui_LabelLogin, LV_SIZE_CONTENT);  /// 1
    lv_obj_set_height(ui_LabelLogin, LV_SIZE_CONTENT); /// 1
    lv_obj_set_align(ui_LabelLogin, LV_ALIGN_CENTER);
    lv_label_set_text(ui_LabelLogin, "登录");
    // 白色文本，与按钮背景形成良好对比
    lv_obj_set_style_text_color(ui_LabelLogin, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_text_opa(ui_LabelLogin, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_add_style(ui_LabelLogin, fontStyle, 0);

    ui_ButtonRegister = lv_btn_create(ui_ContainerLogin);
    lv_obj_set_width(ui_ButtonRegister, 100);
    lv_obj_set_height(ui_ButtonRegister, 50);
    lv_obj_set_x(ui_ButtonRegister, 93);
    lv_obj_set_y(ui_ButtonRegister, 80);
    lv_obj_set_align(ui_ButtonRegister, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_ButtonRegister, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
    lv_obj_clear_flag(ui_ButtonRegister, LV_OBJ_FLAG_SCROLLABLE);    /// Flags
    // 现代化按钮样式
    lv_obj_set_style_bg_color(ui_ButtonRegister, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_ButtonRegister, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_ButtonRegister, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 添加按钮阴影效果
    lv_obj_set_style_shadow_width(ui_ButtonRegister, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_color(ui_ButtonRegister, lv_color_hex(0x6C757D), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_opa(ui_ButtonRegister, 100, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_spread(ui_ButtonRegister, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 按下时的效果
    lv_obj_set_style_shadow_width(ui_ButtonRegister, 5, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_shadow_opa(ui_ButtonRegister, 60, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(ui_ButtonRegister, lv_color_hex(0x6B7FD8), LV_PART_MAIN | LV_STATE_PRESSED);

    ui_LabelRegister = lv_label_create(ui_ButtonRegister);
    lv_obj_set_width(ui_LabelRegister, LV_SIZE_CONTENT);  /// 1
    lv_obj_set_height(ui_LabelRegister, LV_SIZE_CONTENT); /// 1
    lv_obj_set_align(ui_LabelRegister, LV_ALIGN_CENTER);
    lv_label_set_text(ui_LabelRegister, "注册");
    // 白色文本，与按钮背景形成良好对比
    lv_obj_set_style_text_color(ui_LabelRegister, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_text_opa(ui_LabelRegister, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_add_style(ui_LabelRegister, fontStyle, 0);

    ui_ImgButtonExit1 = lv_imgbtn_create(ui_Panel5);
    lv_imgbtn_set_src(ui_ImgButtonExit1, LV_IMGBTN_STATE_RELEASED, NULL, &ui_img_1080391308, NULL);
    lv_obj_set_width(ui_ImgButtonExit1, 51);
    lv_obj_set_height(ui_ImgButtonExit1, 64);
    lv_obj_set_align(ui_ImgButtonExit1, LV_ALIGN_TOP_RIGHT);

    ui_Panel6 = lv_obj_create(ui_Panel5);
    lv_obj_set_width(ui_Panel6, 400);
    lv_obj_set_height(ui_Panel6, 100);
    lv_obj_set_x(ui_Panel6, 0);
    lv_obj_set_y(ui_Panel6, 30);
    lv_obj_set_align(ui_Panel6, LV_ALIGN_TOP_MID);
    lv_obj_clear_flag(ui_Panel6, LV_OBJ_FLAG_SCROLLABLE); /// Flags
    lv_obj_set_style_bg_color(ui_Panel6, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_Panel6, 100, LV_PART_MAIN | LV_STATE_DEFAULT);

    ui_ImageTextLogin = lv_img_create(ui_Panel6);
    lv_img_set_src(ui_ImageTextLogin, &ui_img_fbexhdijn1_png);
    lv_obj_set_width(ui_ImageTextLogin, LV_SIZE_CONTENT);  /// 1
    lv_obj_set_height(ui_ImageTextLogin, LV_SIZE_CONTENT); /// 1
    lv_obj_set_align(ui_ImageTextLogin, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_ImageTextLogin, LV_OBJ_FLAG_ADV_HITTEST);  /// Flags
    lv_obj_clear_flag(ui_ImageTextLogin, LV_OBJ_FLAG_SCROLLABLE); /// Flags

    ui_KeyboardUser1 = lv_keyboard_create(ui_LoginForm);
    lv_obj_set_width(ui_KeyboardUser1, 700);
    lv_obj_set_height(ui_KeyboardUser1, 170);
    lv_obj_set_align(ui_KeyboardUser1, LV_ALIGN_BOTTOM_MID);
    lv_obj_add_flag(ui_KeyboardUser1, LV_OBJ_FLAG_HIDDEN); /// Flags

    ui_KeyboardPassword1 = lv_keyboard_create(ui_LoginForm);
    lv_obj_set_width(ui_KeyboardPassword1, 700);
    lv_obj_set_height(ui_KeyboardPassword1, 170);
    lv_obj_set_align(ui_KeyboardPassword1, LV_ALIGN_BOTTOM_MID);
    lv_obj_add_flag(ui_KeyboardPassword1, LV_OBJ_FLAG_HIDDEN); /// Flags

    ui_PanelRegister = lv_obj_create(ui_LoginForm);
    // 创建一个美观的注册面板（增加高度以容纳三个输入框）
    lv_obj_set_width(ui_PanelRegister, 550);
    lv_obj_set_height(ui_PanelRegister, 500);
    lv_obj_set_align(ui_PanelRegister, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_PanelRegister, LV_OBJ_FLAG_HIDDEN);       /// Flags
    lv_obj_clear_flag(ui_PanelRegister, LV_OBJ_FLAG_SCROLLABLE); /// Flags
    // 使用更淡的蓝色背景主题
    lv_obj_set_style_bg_color(ui_PanelRegister, lv_color_hex(0xE8F2FF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_PanelRegister, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 现代圆角设计
    lv_obj_set_style_radius(ui_PanelRegister, 20, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 添加柔和的边框
    lv_obj_set_style_border_width(ui_PanelRegister, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(ui_PanelRegister, lv_color_hex(0xD4E3FD), LV_PART_MAIN | LV_STATE_DEFAULT);
    // 添加现代阴影效果
    lv_obj_set_style_shadow_width(ui_PanelRegister, 25, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_spread(ui_PanelRegister, 8, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_color(ui_PanelRegister, lv_color_hex(0x6C757D), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_opa(ui_PanelRegister, 120, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(ui_PanelRegister, 30, LV_PART_MAIN | LV_STATE_DEFAULT);

    ui_imgButtonBack = lv_imgbtn_create(ui_PanelRegister);
    lv_imgbtn_set_src(ui_imgButtonBack, LV_IMGBTN_STATE_RELEASED, NULL, &ui_img_1609717271, NULL);
    lv_obj_set_width(ui_imgButtonBack, 48);
    lv_obj_set_height(ui_imgButtonBack, 48);
    lv_obj_set_align(ui_imgButtonBack, LV_ALIGN_TOP_RIGHT);
    lv_obj_set_x(ui_imgButtonBack, -10);
    lv_obj_set_y(ui_imgButtonBack, 10);

    // 隐藏图片，不再使用
    ui_ImageRegisterBackground = lv_img_create(ui_PanelRegister);
    lv_obj_add_flag(ui_ImageRegisterBackground, LV_OBJ_FLAG_HIDDEN);

    // 创建美观的标题标签（使用大号字体）
    lv_style_t * fontStyleLarge = FontStyleInitLarge();
    lv_obj_t * ui_LabelRegisterTitle = lv_label_create(ui_PanelRegister);
    lv_label_set_text(ui_LabelRegisterTitle, "用户注册");
    lv_obj_add_style(ui_LabelRegisterTitle, fontStyleLarge, 0);
    lv_obj_set_style_text_color(ui_LabelRegisterTitle, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_text_opa(ui_LabelRegisterTitle, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_align(ui_LabelRegisterTitle, LV_ALIGN_TOP_MID);
    lv_obj_set_y(ui_LabelRegisterTitle, 20);

    // 先创建用户名输入框
    ui_UserText2 = lv_textarea_create(ui_PanelRegister);
    lv_obj_set_width(ui_UserText2, 330);
    lv_obj_set_height(ui_UserText2, 50);
    lv_obj_set_align(ui_UserText2, LV_ALIGN_TOP_LEFT);
    lv_obj_set_x(ui_UserText2, 120);
    lv_obj_set_y(ui_UserText2, 85);

    // 创建用户名标签，对齐到输入框左侧中间，确保垂直对齐
    lv_obj_t * ui_LabelUsername = lv_label_create(ui_PanelRegister);
    lv_label_set_text(ui_LabelUsername, "用户名：");
    lv_obj_add_style(ui_LabelUsername, fontStyle, 0);
    lv_obj_set_style_text_color(ui_LabelUsername, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_width(ui_LabelUsername, 95);
    lv_label_set_long_mode(ui_LabelUsername, LV_LABEL_LONG_CLIP);
    lv_obj_set_style_text_align(ui_LabelUsername, LV_TEXT_ALIGN_RIGHT, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 使用 align_to 确保标签和输入框垂直中心对齐
    lv_obj_align_to(ui_LabelUsername, ui_UserText2, LV_ALIGN_OUT_LEFT_MID, -10, 0);
    lv_textarea_set_placeholder_text(ui_UserText2, "请输入用户名");
    lv_obj_add_style(ui_UserText2, fontStyle, 0);
    lv_textarea_set_one_line(ui_UserText2, true);
    // 现代化输入框样式：白色背景，圆角，优雅边框
    lv_obj_set_style_bg_color(ui_UserText2, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_UserText2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_UserText2, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_width(ui_UserText2, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(ui_UserText2, lv_color_hex(0xD4E3FD), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(ui_UserText2, 15, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 聚焦时的优雅边框效果（使用售卖界面的蓝色主题）
    lv_obj_set_style_border_color(ui_UserText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_border_width(ui_UserText2, 3, LV_PART_MAIN | LV_STATE_FOCUSED);
    // 添加聚焦时的阴影效果
    lv_obj_set_style_shadow_width(ui_UserText2, 15, LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_color(ui_UserText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_opa(ui_UserText2, 80, LV_PART_MAIN | LV_STATE_FOCUSED);
    // 文本颜色
    lv_obj_set_style_text_color(ui_UserText2, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);

    // 先创建密码输入框
    ui_PasswordText2 = lv_textarea_create(ui_PanelRegister);
    lv_obj_set_width(ui_PasswordText2, 330);
    lv_obj_set_height(ui_PasswordText2, 50);
    lv_obj_set_align(ui_PasswordText2, LV_ALIGN_TOP_LEFT);
    lv_obj_set_x(ui_PasswordText2, 120);
    lv_obj_set_y(ui_PasswordText2, 155);

    // 创建密码标签，对齐到输入框左侧中间，确保垂直对齐
    lv_obj_t * ui_LabelPassword = lv_label_create(ui_PanelRegister);
    lv_label_set_text(ui_LabelPassword, "密码：");
    lv_obj_add_style(ui_LabelPassword, fontStyle, 0);
    lv_obj_set_style_text_color(ui_LabelPassword, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_width(ui_LabelPassword, 95);
    lv_label_set_long_mode(ui_LabelPassword, LV_LABEL_LONG_CLIP);
    lv_obj_set_style_text_align(ui_LabelPassword, LV_TEXT_ALIGN_RIGHT, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 使用 align_to 确保标签和输入框垂直中心对齐
    lv_obj_align_to(ui_LabelPassword, ui_PasswordText2, LV_ALIGN_OUT_LEFT_MID, -10, 0);
    lv_textarea_set_placeholder_text(ui_PasswordText2, "请输入密码");
    lv_obj_add_style(ui_PasswordText2, fontStyle, 0);

    lv_textarea_set_one_line(ui_PasswordText2, true);
    lv_textarea_set_password_mode(ui_PasswordText2, true);
    lv_textarea_set_password_bullet(ui_PasswordText2, "*"); // 使用 ASCII 星号，避免字体缺字显示方框
    // 现代化密码输入框样式：白色背景，圆角，优雅边框
    lv_obj_set_style_bg_color(ui_PasswordText2, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_PasswordText2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_PasswordText2, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_width(ui_PasswordText2, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(ui_PasswordText2, lv_color_hex(0xD4E3FD), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(ui_PasswordText2, 15, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 聚焦时的优雅边框效果（使用售卖界面的蓝色主题）
    lv_obj_set_style_border_color(ui_PasswordText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_border_width(ui_PasswordText2, 3, LV_PART_MAIN | LV_STATE_FOCUSED);
    // 添加聚焦时的阴影效果
    lv_obj_set_style_shadow_width(ui_PasswordText2, 15, LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_color(ui_PasswordText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_opa(ui_PasswordText2, 80, LV_PART_MAIN | LV_STATE_FOCUSED);
    // 文本颜色
    lv_obj_set_style_text_color(ui_PasswordText2, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);

    // 先创建确认密码输入框
    ui_ConfirmPasswordText2 = lv_textarea_create(ui_PanelRegister);
    lv_obj_set_width(ui_ConfirmPasswordText2, 330);
    lv_obj_set_height(ui_ConfirmPasswordText2, 50);
    lv_obj_set_align(ui_ConfirmPasswordText2, LV_ALIGN_TOP_LEFT);
    lv_obj_set_x(ui_ConfirmPasswordText2, 120);
    lv_obj_set_y(ui_ConfirmPasswordText2, 225);

    // 创建确认密码标签，对齐到输入框左侧中间，确保垂直对齐
    lv_obj_t * ui_LabelConfirmPassword = lv_label_create(ui_PanelRegister);
    lv_label_set_text(ui_LabelConfirmPassword, "确认密码：");
    lv_obj_add_style(ui_LabelConfirmPassword, fontStyle, 0);
    lv_obj_set_style_text_color(ui_LabelConfirmPassword, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_width(ui_LabelConfirmPassword, 95);
    lv_label_set_long_mode(ui_LabelConfirmPassword, LV_LABEL_LONG_CLIP);
    lv_obj_set_style_text_align(ui_LabelConfirmPassword, LV_TEXT_ALIGN_RIGHT, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 使用 align_to 确保标签和输入框垂直中心对齐
    lv_obj_align_to(ui_LabelConfirmPassword, ui_ConfirmPasswordText2, LV_ALIGN_OUT_LEFT_MID, -10, 0);
    lv_textarea_set_placeholder_text(ui_ConfirmPasswordText2, "请再次输入密码");
    lv_obj_add_style(ui_ConfirmPasswordText2, fontStyle, 0);
    lv_textarea_set_one_line(ui_ConfirmPasswordText2, true);
    lv_textarea_set_password_mode(ui_ConfirmPasswordText2, true);
    lv_textarea_set_password_bullet(ui_ConfirmPasswordText2, "*");
    // 现代化确认密码输入框样式
    lv_obj_set_style_bg_color(ui_ConfirmPasswordText2, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_ConfirmPasswordText2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_ConfirmPasswordText2, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_width(ui_ConfirmPasswordText2, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(ui_ConfirmPasswordText2, lv_color_hex(0xD4E3FD), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(ui_ConfirmPasswordText2, 15, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_border_color(ui_ConfirmPasswordText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_border_width(ui_ConfirmPasswordText2, 3, LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_width(ui_ConfirmPasswordText2, 15, LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_color(ui_ConfirmPasswordText2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_shadow_opa(ui_ConfirmPasswordText2, 80, LV_PART_MAIN | LV_STATE_FOCUSED);
    lv_obj_set_style_text_color(ui_ConfirmPasswordText2, lv_color_hex(0x2C3E50), LV_PART_MAIN | LV_STATE_DEFAULT);

    // 创建美观的注册按钮（文本按钮，不使用图片）
    ui_ButtonRegister2 = lv_btn_create(ui_PanelRegister);
    lv_obj_set_width(ui_ButtonRegister2, 240);
    lv_obj_set_height(ui_ButtonRegister2, 55);
    lv_obj_set_align(ui_ButtonRegister2, LV_ALIGN_TOP_MID);
    lv_obj_set_x(ui_ButtonRegister2, 0);
    lv_obj_set_y(ui_ButtonRegister2, 300);
    lv_obj_set_style_bg_color(ui_ButtonRegister2, lv_color_hex(0x8291FF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(ui_ButtonRegister2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_radius(ui_ButtonRegister2, 12, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 添加按钮阴影效果
    lv_obj_set_style_shadow_width(ui_ButtonRegister2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_color(ui_ButtonRegister2, lv_color_hex(0x6C757D), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_style_shadow_opa(ui_ButtonRegister2, 100, LV_PART_MAIN | LV_STATE_DEFAULT);
    // 按下时的效果
    lv_obj_set_style_shadow_width(ui_ButtonRegister2, 5, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_shadow_opa(ui_ButtonRegister2, 60, LV_PART_MAIN | LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(ui_ButtonRegister2, lv_color_hex(0x6B7FD8), LV_PART_MAIN | LV_STATE_PRESSED);

    // 创建按钮标签
    ui_LabelRegister2 = lv_label_create(ui_ButtonRegister2);
    lv_label_set_text(ui_LabelRegister2, "注册");
    lv_obj_add_style(ui_LabelRegister2, fontStyle, 0);
    lv_obj_set_style_text_color(ui_LabelRegister2, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_set_align(ui_LabelRegister2, LV_ALIGN_CENTER);

    ui_Keyboardpassword2 = lv_keyboard_create(ui_LoginForm);
    lv_obj_set_width(ui_Keyboardpassword2, 700);
    lv_obj_set_height(ui_Keyboardpassword2, 170);
    lv_obj_set_align(ui_Keyboardpassword2, LV_ALIGN_BOTTOM_MID);
    lv_obj_add_flag(ui_Keyboardpassword2, LV_OBJ_FLAG_HIDDEN); /// Flags

    ui_KeyboardUser2 = lv_keyboard_create(ui_LoginForm);
    lv_obj_set_width(ui_KeyboardUser2, 700);
    lv_obj_set_height(ui_KeyboardUser2, 170);
    lv_obj_set_align(ui_KeyboardUser2, LV_ALIGN_BOTTOM_MID);
    lv_obj_add_flag(ui_KeyboardUser2, LV_OBJ_FLAG_HIDDEN); /// Flags

    ui_KeyboardConfirmPassword2 = lv_keyboard_create(ui_LoginForm);
    lv_obj_set_width(ui_KeyboardConfirmPassword2, 700);
    lv_obj_set_height(ui_KeyboardConfirmPassword2, 170);
    lv_obj_set_align(ui_KeyboardConfirmPassword2, LV_ALIGN_BOTTOM_MID);
    lv_obj_add_flag(ui_KeyboardConfirmPassword2, LV_OBJ_FLAG_HIDDEN); /// Flags

    // 添加事件
    lv_obj_add_event_cb(ui_UserText1, ui_event_UserText1, LV_EVENT_ALL, NULL);
    lv_obj_add_event_cb(ui_PasswordText1, ui_event_PasswordText1, LV_EVENT_ALL, NULL);
    lv_obj_add_event_cb(ui_ButtonLogin, ui_event_ButtonLogin, LV_EVENT_CLICKED, NULL);
    lv_obj_add_event_cb(ui_ButtonRegister, ui_event_ButtonRegister, LV_EVENT_CLICKED, NULL);
    lv_keyboard_set_textarea(ui_KeyboardUser1, ui_UserText1);
    lv_keyboard_set_textarea(ui_KeyboardPassword1, ui_PasswordText1);
    lv_obj_add_event_cb(ui_imgButtonBack, ui_event_imgButtonBack, LV_EVENT_ALL, NULL);
    lv_obj_add_event_cb(ui_UserText2, ui_event_UserText2, LV_EVENT_ALL, NULL);
    lv_obj_add_event_cb(ui_PasswordText2, ui_event_PasswordText2, LV_EVENT_ALL, NULL);
    lv_obj_add_event_cb(ui_ConfirmPasswordText2, ui_event_ConfirmPasswordText2, LV_EVENT_ALL, NULL);
    lv_keyboard_set_textarea(ui_Keyboardpassword2, ui_PasswordText2);
    lv_keyboard_set_textarea(ui_KeyboardUser2, ui_UserText2);
    lv_keyboard_set_textarea(ui_KeyboardConfirmPassword2, ui_ConfirmPasswordText2);
    lv_obj_add_event_cb(ui_ButtonRegister2, ui_event_ButtonRegister2, LV_EVENT_CLICKED, NULL);
    lv_obj_add_event_cb(ui_ImgButtonExit1, ui_event_ImgButtonExit1, LV_EVENT_CLICKED, NULL);
}

/**
 * @brief 登录表单屏幕销毁函数
 * @note 删除登录表单屏幕对象，并将所有UI对象指针设置为NULL，防止野指针
 */
void ui_LoginForm_screen_destroy(void)
{
    // 如果登录表单对象存在，则删除它
    if(ui_LoginForm) lv_obj_del(ui_LoginForm);

    // 将所有UI对象指针设置为NULL，防止野指针
    ui_LoginForm               = NULL;
    ui_Panel5                  = NULL;
    ui_Image14                 = NULL;
    ui_ContainerLogin          = NULL;
    ui_UserText1               = NULL;
    ui_PasswordText1           = NULL;
    ui_ButtonLogin             = NULL;
    ui_LabelLogin              = NULL;
    ui_ButtonRegister          = NULL;
    ui_LabelRegister           = NULL;
    ui_ImgButtonExit1          = NULL;
    ui_Panel6                  = NULL;
    ui_ImageTextLogin          = NULL;
    ui_KeyboardUser1           = NULL;
    ui_KeyboardPassword1       = NULL;
    ui_PanelRegister           = NULL;
    ui_imgButtonBack           = NULL;
    ui_ImageRegisterBackground = NULL;
    ui_UserText2               = NULL;
    ui_PasswordText2           = NULL;
    ui_ConfirmPasswordText2    = NULL;
    ui_ButtonRegister2         = NULL;
    ui_LabelRegister2          = NULL;
    ui_Keyboardpassword2       = NULL;
    ui_KeyboardUser2           = NULL;
    ui_KeyboardConfirmPassword2 = NULL;
}
